import { HttpStatus, MidwayHttpError } from '@midwayjs/core';

// 400 Bad Request：服务器不理解客户端的请求，未做任何处理。
// 401 Unauthorized：用户未提供身份验证凭据，或者没有通过身份验证。
// 403 Forbidden：用户通过了身份验证，但是不具有访问资源所需的权限。
// 404 Not Found：所请求的资源不存在，或不可用。
// 405 Method Not Allowed：用户已经通过身份验证，但是所用的 HTTP 方法不在他的权限之内。
// 410 Gone：所请求的资源已从这个地址转移，不再可用。
// 415 Unsupported Media Type：客户端要求的返回格式不支持。比如，API 只能返回 JSON 格式，但是客户端要求返回 XML 格式。
// 422 Unprocessable Entity ：客户端上传的附件无法处理，导致请求失败。
// 429 Too Many Requests：客户端的请求次数超过限额。

// 请求方法错误报错
export class MethodNotAllowed extends MidwayHttpError {
  constructor() {
    super('MethodNotAllowed', HttpStatus.METHOD_NOT_ALLOWED);
  }
}

// 注册时用户名已存在
export class UserExists extends MidwayHttpError {
  constructor() {
    super('UserExists', HttpStatus.BAD_REQUEST);
  }
}

// 数据库中找不到用户报错
export class UserNotFound extends MidwayHttpError {
  constructor() {
    super('UserNotFound', HttpStatus.NOT_FOUND);
  }
}

// 频繁登录
export class LoginFrequently extends MidwayHttpError {
  constructor() {
    super('FrequentLogin', HttpStatus.BAD_REQUEST);
  }
}

// 资源找不到
export class ResourceNotFound extends MidwayHttpError {
  constructor() {
    super('ResourceNotFound', HttpStatus.NOT_FOUND);
  }
}

// 两次用户密码输入不同
export class PasswordDiffer extends MidwayHttpError {
  constructor() {
    super('PasswordDiffer', HttpStatus.BAD_REQUEST);
  }
}

// 认证失败
export class Unauthorized extends MidwayHttpError {
  constructor() {
    super('Unauthorized', HttpStatus.UNAUTHORIZED);
  }
}

// 参数错误
export class ParamsLack extends MidwayHttpError {
  constructor() {
    super('ParameterError', HttpStatus.BAD_REQUEST);
  }
}

// 文件上传错误
export class FileUploadError extends MidwayHttpError {
  constructor() {
    super('FileUploadError', HttpStatus.BAD_REQUEST);
  }
}

// 文件格式不规范
export class FileFormatError extends MidwayHttpError {
  constructor() {
    super('FileFormatError', HttpStatus.BAD_REQUEST);
  }
}

// SQL语句错误
export class SQLGrammarError extends MidwayHttpError {
  constructor() {
    super('SQLGrammarError', HttpStatus.BAD_REQUEST);
  }
}
